package donkeykong;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JPanel;

public class Puntuacion_imagen extends JPanel implements Runnable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Image imagenPuntuacion;
	private Mario mario;
	private boolean finalizar;
	private Clip clickClip;
	private AudioInputStream musicaSonido;

	public Puntuacion_imagen(Mario m, int cuantia){
		try {
			mario = m;
			finalizar = false;
			if (cuantia==1){ //Saltar barriles
				imagenPuntuacion = ImageIO.read(new File("./images/100_puntos.png"));
			}else if (cuantia==2){ //Saltar espectros
				imagenPuntuacion = ImageIO.read(new File("./images/100_puntos.png"));
			}else if (cuantia==3){// Matar espectros
				imagenPuntuacion = ImageIO.read(new File("./images/300_puntos.png"));
			}else if (cuantia==4){ //Plataformas
				imagenPuntuacion = ImageIO.read(new File("./images/100_puntos.png"));
			}
			

		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	
	
	public Puntuacion_imagen(Mario m, String nombreObjetoImagen) {
		try {
			mario = m;
			finalizar = false;
			if (nombreObjetoImagen.equals("paraguas")){ //Paraguas
				imagenPuntuacion = ImageIO.read(new File("./images/200_puntos.png"));
			}else if (nombreObjetoImagen.equals("bolso")){ //bolso
				imagenPuntuacion = ImageIO.read(new File("./images/500_puntos.png"));
			}else if (nombreObjetoImagen.equals("sombrero")){//sombrero
				imagenPuntuacion = ImageIO.read(new File("./images/900_puntos.png"));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


	public void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		/** Para hacer operaciones complejas con una imagen, crear un AffineTransform **/
		AffineTransform at = new AffineTransform();
		at = new AffineTransform();
		at.translate(mario.getPosicion_x()+mario.getImage().getWidth(null),mario.getPosicion_y()); 
		g2d.drawImage(imagenPuntuacion,at,null);
	}
	
	
	@Override
	public void run() {
		try {
			escucharSonido("item_points",0);
			Thread.sleep(600);	
			pararSonido();
			Thread.sleep(100);	

			setAcabar(true);
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}


	public void setAcabar(boolean b) {
		finalizar = b;
	}


	public boolean Acabar() {
		return finalizar;
	}

	
	/** Funcion que permite reproducir un sonido
	 * 
	 * @param sonido : Nombre (sin extension) del sonido a reproducir
	 * @param duracion : Duracion de la musica por si qse quiere repetir indefinidamente o solo unas veces
	 */
	public void escucharSonido(String sonido, int duracion){
		try {
			clickClip = AudioSystem.getClip();
			musicaSonido = AudioSystem.getAudioInputStream(new File("./sounds/"+sonido+".wav"));
			clickClip.open(musicaSonido);
			clickClip.loop(duracion);
			clickClip.start();
		} catch (LineUnavailableException e) {
			e.printStackTrace();
		} catch (UnsupportedAudioFileException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	/** Funcion que se utiliza para parar el sonido, si esta activado **/
	public void pararSonido(){
		if(clickClip != null){
			clickClip.stop();
		}
	}
}
